package pe.edu.upla.lamerced.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.upla.lamerced.DAO.HabitacionDAO;
import pe.edu.upla.lamerced.DAO.HospedajeDAO;
import pe.edu.upla.lamerced.bean.Detallefactura;
import pe.edu.upla.lamerced.bean.Factura;
import pe.edu.upla.lamerced.bean.Habitacion;
import pe.edu.upla.lamerced.bean.Hospedaje;
import pe.edu.upla.lamerced.service.HospedajeService;

@Service
public class HospedajeServiceImpl implements HospedajeService {

	@Autowired
	HospedajeDAO hospedajeDAO;
	@Autowired
	HabitacionDAO habitacionDAO;
	
	@Override
	public void registrarHospedaje(Hospedaje hospedaje) {
		hospedajeDAO.registrarHospedaje(hospedaje);
	}

	@Override
	@Transactional(propagation=Propagation.REQUIRES_NEW)
	public void registrarReserva(Hospedaje hospedaje) {
		hospedajeDAO.registrarReserva(hospedaje);
		Habitacion hab = habitacionDAO.obtenerHabitacion(hospedaje.getHabitacion().getIdhabitacion());
		hab.setEstado(1);
		habitacionDAO.modificarHabitacion(hab);
	}

	@Override
	public Hospedaje obtenerReserva(Integer idhospedaje) {
		return hospedajeDAO.obtenerReserva(idhospedaje);
	}

	@Override
	public List<Hospedaje> listarRserva(Hospedaje hospedaje) {
		return hospedajeDAO.listarRserva(hospedaje);
	}

	@Override
	public Hospedaje obtenerHospedaje(Integer idhospedaje) {
		return hospedajeDAO.obtenerHospedaje(idhospedaje);
	}

	@Override
	public void registrarHospedajeReserva(Hospedaje hospedaje) {
		hospedajeDAO.registrarHospedajeReserva(hospedaje);
	}

	@Override
	@Transactional(propagation=Propagation.REQUIRES_NEW)
	public void finalizarreserva(Hospedaje hospedaje) {
		Hospedaje hos = hospedajeDAO.obtenerReserva(hospedaje.getIdhospedaje());
		hos.setEstado(0);
		hospedajeDAO.finalizarreserva(hos);
		Habitacion hab = habitacionDAO.obtenerHabitacion(hospedaje.getHabitacion().getIdhabitacion());
		hab.setEstado(2);
		habitacionDAO.modificarHabitacion(hab);
	}

	/**
	 * lista de hospedajes. si es historico no debe importar si <br/>
	 * esta activo el hospedajeo y a terminado (estados 2 y 3 )
	 */
	@Override
	public List<Hospedaje> listaHospedajes(String usuario) {
		return hospedajeDAO.listaHospedajes(usuario);
	}

	@Override
	public List<Habitacion> buscarHabitacionesdisponibles(Hospedaje h) {
		return hospedajeDAO.buscarHabitacionesdisponibles(h);
	}

	@Override
	public void anularReserva(int codigo) {
		hospedajeDAO.anularReserva(codigo);
	}

	@Override
	public List<Hospedaje> listaHospedajesActivos() {
		return hospedajeDAO.listaHospedajesActivos();
	}

	@Override
	@Transactional(propagation=Propagation.REQUIRES_NEW)
	public void registrarFactura(Factura fac, List<Detallefactura> lisDet) {
		hospedajeDAO.registrarFactura(fac,lisDet);
	}

}
